#ifndef BELLMANFORD_H
#define BELLMANFORD_H

#include "grafo.h"
#include "algoritmo.h"

class BellmanFord : public Algoritmo
{
    public:
        /** Costruttore che inizializza il grafo su cui operare */
        BellmanFord(Grafo* grafo) : Algoritmo(grafo) { };
        /** Distruttore di default */
        virtual ~BellmanFord();

        virtual void esegui(report_function report_func);
        virtual const char* get_nome();
    protected:
    private:
    
    /** Esegue il ciclo di rilassamento degli archi.
     * @param[in] report_func Puntatore alla funzione che si occupa di eseguire il trace
     * @return Numero di archi rilassati
     */
    guint rilassa_archi(report_function report_func);
};

#endif // BELLMANFORD_H
